package com.bajiao.service.user;

import com.bajiao.entity.coupon.Coupon;
import com.bajiao.entity.user.UserCoupon;
import com.bajiao.vo.coupon.CouponResponse;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * @Description: 用户优惠券表
 * @Author: FanJq
 * @Date:   2024-12-13
 * @Version: V1.0
 */
public interface UserCouponService extends IService<UserCoupon> {

    /**
     * @Description
     * 获取用户拥有的指定优惠券数量
     * @date 2024/12/13 16:56
     * @author FanJq
     * @param userId
     * @param couponId
     * @return {@link Integer}
    */
    Integer getUserHasCount(String userId, String couponId);

    /**
     * @Description
     * 获取用户可用优惠券
     * @date 2024/12/18 15:07
     * @author FanJq
     * @param userId
     * @param couponId
     * @return {@link UserCoupon}
    */
    UserCoupon getUserUsableCoupon(String userId, String couponId);

    /**
     * @Description
     * 获取用户拥有的优惠券
     * @date 2024/12/13 17:29
     * @author FanJq
     * @param userId
     * @param storeId
     * @return {@link List< CouponResponse>}
    */
    List<CouponResponse> getUserHasCoupon(String userId, String storeId);

    /**
     * @Description
     * 使用优惠券
     * @date 2024/12/16 10:06
     * @author FanJq
     * @return
    */
    void useCoupon(UserCoupon userCoupon, Integer status);

    /**
     * @Description
     * 获取用户优惠券
     * @date 2024/12/16 10:10
     * @author FanJq
     * @param userId
     * @param userCouponId
     * @return {@link UserCoupon}
    */
    UserCoupon getById(String userId, String userCouponId);

    /**
     * @Description
     * 创建用户优惠券
     * @date 2024/12/18 16:42
     * @author FanJq
     * @param userId
     * @param coupon
     * @param orderNo
     * @return {@link UserCoupon}
    */
    UserCoupon create(String userId, Coupon coupon, String orderNo);

    /**
     * @Description
     * 获取今日到期的用户优惠券
     * @date 2024/12/19 10:02
     * @author FanJq
     * @param
     * @return {@link List< UserCoupon>}
    */
    List<UserCoupon> getTodayExpire();

    /**
     * @Description
     * 获取已过期的
     * @date 2024/12/20 15:02
     * @author FanJq
     * @param
     * @return {@link List< UserCoupon>}
    */
    List<UserCoupon> getExpired();

    /**
     * @Description
     * 执行优惠券到期事件
     * @date 2024/12/19 10:30
     * @author FanJq
     * @param
     * @return
    */
    void expiredEvent(UserCoupon userCoupon);

    /**
     * @Description
     * 根据订单编号获取
     * @date 2024/12/20 15:17
     * @author FanJq
     * @param userId
     * @param orderNo
     * @return {@link UserCoupon}
    */
    UserCoupon getByOrderNo(String userId, String orderNo);

    /**
     * @Description
     * 根据用户id获取
     * @date 2024/12/24 17:07
     * @author FanJq
     * @param userId
     * @return {@link List< CouponResponse>}
    */
    List<CouponResponse> getByUserId(String userId);

    /**
     * @Description
     * 根据核销码获取
     * @date 2024/12/26 14:32
     * @author FanJq
     * @param verifyCode
     * @return {@link UserCoupon}
    */
    UserCoupon getByVerifyCode(String verifyCode);
}
